package ar.edu.utn.frba.tacs.warnes.rest;

import java.util.List;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import ar.edu.utn.frba.tacs.warnes.entities.Pieza;
import ar.edu.utn.frba.tacs.warnes.pojos.AutoPojo;
import ar.edu.utn.frba.tacs.warnes.pojos.PiezaPojo;
import ar.edu.utn.frba.tacs.warnes.pojos.PiezaPojoList;
import ar.edu.utn.frba.tacs.warnes.utils.ContenedorWarnes;

/**
 * 
 * @author Diego
 * 
 */
@WebService
@Path("/piezas/")
@Produces( { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public class PiezaResource extends WarnesResource {
	public PiezaResource() {
		super();
	}

	/**
	 * Obtiene la lista de piezas
	 * 
	 * @return
	 */
	@WebMethod
	@GET
	@Path("/piezas")
	public PiezaPojoList getPiezas() {
		List<Pieza> piezas = ContenedorWarnes.getInstance().getPiezas();
		PiezaPojoList piezasPojo = new PiezaPojoList(piezas);
		return piezasPojo;
	}

	/**
	 * Obtiene un unico pieza por id
	 * 
	 * @param id
	 * @return
	 */
	@WebMethod
	@GET
	@Path("id/{id}")
	public PiezaPojo getPiezaPorId(@PathParam("id") Long id) {
		Pieza pieza = ContenedorWarnes.getInstance().getPieza(id);
		PiezaPojo piezaPojo = new PiezaPojo(pieza);
		return piezaPojo;
	}

	/**
	 * Obtiene un unico pieza
	 * 
	 * @param id
	 * @return
	 */
	@WebMethod
	@GET
	@Path("descripcion/{descripcion}")
	public PiezaPojo getPiezaPorDescripcion(
			@PathParam("descripcion") String descripcion) {
		Pieza pieza = ContenedorWarnes.getInstance().getPieza(descripcion);
		PiezaPojo piezaPojo = new PiezaPojo(pieza);
		return piezaPojo;
	}

	/**
	 * Crea un nuevo pieza
	 * 
	 * @param pieza
	 * @return
	 */
	@WebMethod
	@POST
	@Path("/agregar/{nombre}")
	public void addPieza(@PathParam("nombre") String nombre) {
		ContenedorWarnes.getInstance().creaUnaPieza(nombre).save();
	}

	/**
	 * Borra el pieza indicado
	 * 
	 * @param id
	 * @return
	 */
	@WebMethod
	@DELETE
	@Path("/borrar/{descripcion}")
	public void deletePieza(@PathParam("descripcion") String descripcion) {
		ContenedorWarnes.getInstance().borrarPieza(descripcion);
	}

	/**
	 * Obtiene el auto de la pieza
	 * 
	 * @param id
	 * @return
	 */
	@WebMethod
	@GET
	@Path("id/{id}/auto")
	public AutoPojo getAutoDeLaPiezaPorId(@PathParam("id") Long id) {
		Pieza pieza = ContenedorWarnes.getInstance().getPieza(id);
		AutoPojo autoPojo = new AutoPojo(pieza.getAutoOrigen());
		return autoPojo;
	}
}
